{"cells":[{"cell_type":"markdown","metadata":{"id":"2KAJAbmd-9Lh"},"source":["# Real time demo - trigger word detection\n","Modified from https://github.com/Tony607/Keras-Trigger-Word.git\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"8G2RKSkW-9Lm"},"outputs":[],"source":["import tensorflow as tf\n","from tensorflow.lite.experimental.microfrontend.python.ops import audio_microfrontend_op as frontend_op\n","\n","import numpy as np\n","import time\n","# from pydub import AudioSegment\n","from scipy.io import wavfile\n","import random\n","import sys\n","import io\n","import os\n","import pathlib\n","import glob\n","\n","# from td_utils import *\n","import matplotlib.mlab as mlab\n","import matplotlib.pyplot as plt\n","# To generate wav file from np array.\n","from scipy.io.wavfile import write\n","\n","import IPython\n","import IPython.display as ipd\n","\n","%matplotlib inline"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"f-QToxCA-9Lo"},"outputs":[],"source":["# # Use 1101 for 2sec input audio\n","# Tx = 16 # The number of time steps input to the model from the spectrogram\n","# num_filters = n_freq = 40 # Number of frequencies input to the model at each time step of the spectrogram\n","\n","# model_file = 'kws_ufe_15mar2022.h5'\n","# i16min = -2**15\n","# i16max = 2**15-1\n","# fsamp = fs\n","# wave_length_ms = 1000\n","# wave_length_samps = int(wave_length_ms*fsamp/1000)\n","# window_size_ms=80\n","# window_step_ms=60\n","# use_microfrontend = True\n","\n","\n","model_file = 'kws_ufe_23mar2022_1821.h5'\n","i16min            = -32768\n","i16max            = 32767\n","fsamp             = 16000\n","wave_length_ms    = 1000\n","wave_length_samps = 16000\n","window_size_ms    = 60\n","window_step_ms    = 40\n","num_filters       = 32\n","use_microfrontend = True\n","label_list        = ['_silence', '_unknown', 'left', 'right']\n","spectrogram_shape = (1, 24, 32, 1)\n","\n","Tx = spectrogram_shape[1] # The number of time steps input to the model from the spectrogram\n","num_filters = n_freq = spectrogram_shape[2] # Number of frequencies input to the model at each time step of the spectrogram\n"]},{"cell_type":"markdown","metadata":{"id":"jxNG8pEv-9Lp"},"source":["## Load a pre-train model"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":415},"id":"CThN-vut-9Lq","executionInfo":{"status":"error","timestamp":1648066113235,"user_tz":240,"elapsed":114,"user":{"displayName":"Brandon Kepley","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"09796626090760552437"}},"outputId":"089f46e8-78fd-4429-8a42-f727ac873fa6"},"outputs":[{"output_type":"error","ename":"OSError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mOSError\u001b[0m                                   Traceback (most recent call last)","\u001b[0;32m<ipython-input-12-999283df27d4>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;31m# model = tf.compat.v1.keras.models.load_model('./models/tr_model.h5')\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkeras\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodels\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel_file\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Model input is: {model.input.shape}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msummary\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m     65\u001b[0m     \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m  \u001b[0;31m# pylint: disable=broad-except\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     66\u001b[0m       \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_process_traceback_frames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__traceback__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m       \u001b[0;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwith_traceback\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfiltered_tb\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     68\u001b[0m     \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     69\u001b[0m       \u001b[0;32mdel\u001b[0m \u001b[0mfiltered_tb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.7/dist-packages/keras/saving/save.py\u001b[0m in \u001b[0;36mload_model\u001b[0;34m(filepath, custom_objects, compile, options)\u001b[0m\n\u001b[1;32m    202\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_str\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    203\u001b[0m           \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgfile\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexists\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_str\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 204\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0mIOError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'No file or directory found at {filepath_str}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    205\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    206\u001b[0m           \u001b[0;32mif\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mio\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgfile\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misdir\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_str\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mOSError\u001b[0m: No file or directory found at kws_ufe_23mar2022_1821.h5"]}],"source":["# tf.compat.v1.disable_v2_behavior() # Needed if model trained in tf1\n","# model = tf.compat.v1.keras.models.load_model('./models/tr_model.h5')\n","\n","model = tf.keras.models.load_model(model_file)\n","print(f\"Model input is: {model.input.shape}\")\n","model.summary()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"UrgnCIXY-9Ls"},"outputs":[],"source":["def get_spectrogram(waveform):\n","  # Concatenate audio with padding so that all audio clips will be of the \n","  # same length (16000 samples)\n","  zero_padding = tf.zeros([wave_length_samps] - tf.shape(waveform), dtype=tf.int16)\n","  waveform = tf.cast(0.5*waveform*(i16max-i16min), tf.int16)  # scale float [-1,+1]=>INT16\n","  equal_length = tf.concat([waveform, zero_padding], 0)\n","  ## Make sure these labels correspond to those used in micro_features_micro_features_generator.cpp\n","  spectrogram = frontend_op.audio_microfrontend(equal_length, sample_rate=fsamp, num_channels=num_filters,\n","                                    window_size=window_size_ms, window_step=window_step_ms)\n","  return spectrogram\n"]},{"cell_type":"markdown","metadata":{"id":"qdcAxq2V-9Ls"},"source":["### Test model on static input"]},{"cell_type":"code","source":["# Download the speech_commands dataset\n","\n","DATASET_PATH = 'data/speech_commands_files_0.2'\n","\n","data_dir = pathlib.Path(DATASET_PATH)\n","if not data_dir.exists():\n","  tf.keras.utils.get_file(\n","      'speech_commands_v0.02.tar.gz',\n","      origin=\"http://download.tensorflow.org/data/speech_commands_v0.02.tar.gz\",\n","      # origin=\"http://storage.googleapis.com/download.tensorflow.org/data/mini_speech_commands.zip\",\n","      extract=True, cache_dir='.', cache_subdir='data/speech_commands_files_0.2')\n","  "],"metadata":{"id":"S7J9NbyEBhZy"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"HQkXSyZU-9Lt"},"outputs":[],"source":["!ls $wav_dir | head -n 20"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":347},"id":"F860SvnZ-9Lt","executionInfo":{"status":"ok","timestamp":1648066179238,"user_tz":240,"elapsed":577,"user":{"displayName":"Brandon Kepley","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"09796626090760552437"}},"outputId":"e76a8e85-2a77-4126-ef87-e7b6be8f4838"},"outputs":[{"output_type":"stream","name":"stdout","text":["Fsamp = 16000.  wav shape = (16000,)\n","spec shape = (24, 32)\n"]},{"output_type":"execute_result","data":{"text/plain":["<IPython.lib.display.Audio object>"],"text/html":["\n","                <audio controls=\"controls\" >\n","                    <source src=\"data:audio/wav;base64,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\" type=\"audio/wav\" />\n","                    Your browser does not support the audio element.\n","                </audio>\n","              "]},"metadata":{},"execution_count":14},{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 2 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}],"source":["wav_dir = os.path.join('data/speech_commands_files_0.2/sheila/')\n","wav_file = os.path.join(wav_dir, '2144be19_nohash_0.wav')\n","                        \n","fs, test_wav = wavfile.read(wav_file)\n","print(f\"Fsamp = {fs}.  wav shape = {test_wav.shape}\")\n","\n","test_spec = get_spectrogram(test_wav)\n","print(f\"spec shape = {test_spec.shape}\")\n","plt.subplot(2,1,1)\n","plt.plot(np.arange(len(test_wav))/fs, test_wav)\n","plt.subplot(2,1,2)\n","plt.imshow(test_spec.numpy().T, aspect='auto', origin='lower', interpolation='none')\n","ipd.Audio(test_wav, rate=fs)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"993KABN6-9Lu","executionInfo":{"status":"ok","timestamp":1648062092803,"user_tz":240,"elapsed":378,"user":{"displayName":"Austen Brooks","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"04643783456679642380"}},"outputId":"d4f42880-8558-4849-b208-c78c75089ce2"},"outputs":[{"output_type":"stream","name":"stdout","text":["Classification = left\n"]}],"source":["label_list = ['_silence', '_unknown', 'left', 'right']\n","y = model.predict(np.expand_dims(test_spec, [0,-1]))\n","print(f\"Classification = {label_list[np.argmax(y)]}\")"]},{"cell_type":"markdown","metadata":{"id":"pllbMcA3-9Lv"},"source":["### Detect trigger word functions"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"SBMBZpBg-9Lv"},"outputs":[],"source":["def detect_triggerword_spectrum(x):\n","    \"\"\"\n","    Function to predict the location of the trigger word.\n","    \n","    Argument:\n","    x -- spectrum of shape (freqs, Tx)\n","    i.e. (Number of frequencies, The number time steps)\n","\n","    Returns:\n","    predictions -- flattened numpy array to shape (number of output time steps)\n","    \"\"\"\n","    # the spectogram outputs  and we want (Tx, freqs) to input into the model\n","    x  = x.swapaxes(0,1)\n","    x = np.expand_dims(x, axis=0)\n","    predictions = model.predict(x)\n","    return predictions.reshape(-1)\n","\n","def has_new_triggerword(predictions, chunk_duration, feed_duration, threshold=0.5):\n","    \"\"\"\n","    Function to detect new trigger word in the latest chunk of input audio.\n","    It is looking for the rising edge of the predictions data belongs to the\n","    last/latest chunk.\n","    \n","    Argument:\n","    predictions -- predicted labels from model\n","    chunk_duration -- time in second of a chunk\n","    feed_duration -- time in second of the input to model\n","    threshold -- threshold for probability above a certain to be considered positive\n","\n","    Returns:\n","    True if new trigger word detected in the latest chunk\n","    \"\"\"\n","    predictions = predictions > threshold\n","    chunk_predictions_samples = int(len(predictions) * chunk_duration / feed_duration)\n","    chunk_predictions = predictions[-chunk_predictions_samples:]\n","    level = chunk_predictions[0]\n","    for pred in chunk_predictions:\n","        if pred > level:\n","            return True\n","        else:\n","            level = pred\n","    return False\n","    \n","    "]},{"cell_type":"markdown","metadata":{"id":"l0HF7_84-9Lw"},"source":["# Record audio stream from mic"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"JNtI6ba2-9Lw"},"outputs":[],"source":["chunk_duration = 0.25 # Each read length in seconds from mic.\n","fs = 16000 # sampling rate for mic\n","chunk_samples = int(fs * chunk_duration) # Each read length in number of samples.\n","\n","# Each model input data duration in seconds, need to be an integer numbers of chunk_duration\n","feed_duration = 1.0\n","feed_samples = int(fs * feed_duration)\n","\n","assert feed_duration/chunk_duration == int(feed_duration/chunk_duration)"]},{"cell_type":"markdown","metadata":{"id":"BAEVwl0u-9Lx"},"source":["### Audio stream"]},{"cell_type":"code","source":["!apt install libasound2-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"-J6pRyWQGGbt","executionInfo":{"status":"ok","timestamp":1648062095961,"user_tz":240,"elapsed":3165,"user":{"displayName":"Austen Brooks","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"04643783456679642380"}},"outputId":"b7f4ddc2-a34f-435e-f8c4-c3cdb53994ce"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Reading package lists... Done\n","Building dependency tree       \n","Reading state information... Done\n","libportaudio2 is already the newest version (19.6.0-1).\n","libportaudiocpp0 is already the newest version (19.6.0-1).\n","portaudio19-dev is already the newest version (19.6.0-1).\n","libasound2-dev is already the newest version (1.1.3-5ubuntu0.6).\n","ffmpeg is already the newest version (7:3.4.8-0ubuntu0.2).\n","0 upgraded, 0 newly installed, 0 to remove and 39 not upgraded.\n"]}]},{"cell_type":"code","source":["!pip install PyAudio"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"U-coLaEpFj_n","executionInfo":{"status":"ok","timestamp":1648062099102,"user_tz":240,"elapsed":3178,"user":{"displayName":"Austen Brooks","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"04643783456679642380"}},"outputId":"03ee7e6e-1d5f-4325-add5-83715298e590"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: PyAudio in /usr/local/lib/python3.7/dist-packages (0.2.11)\n"]}]},{"cell_type":"code","execution_count":null,"metadata":{"id":"QDNWhS9r-9Lx"},"outputs":[],"source":["import pyaudio\n","from queue import Queue\n","from threading import Thread\n","import sys\n","import time"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"lqBxfcZ--9Ly","outputId":"47ee47ee-6e62-4b57-f21a-ff2b5199b5fe"},"outputs":[{"name":"stdout","output_type":"stream","text":["pyAudio\n","a\n"]}],"source":["# Queue to communiate between the audio callback and main thread\n","q = Queue()\n","\n","run = True\n","\n","silence_threshold = 100\n","\n","# Run the demo for a timeout seconds\n","timeout = time.time() + 1 \n","\n","# Data buffer for the input wavform\n","data = np.zeros(feed_samples, dtype='int16')\n","\n","def callback(in_data, frame_count, time_info, status):\n","    global run, timeout, data, silence_threshold    \n","    if time.time() > timeout:\n","        run = False        \n","    data0 = np.frombuffer(in_data, dtype='int16')\n","    data = np.append(data,data0)    \n","    if len(data) > feed_samples:\n","        data = data[-feed_samples:]\n","        # Process data async by sending a queue.\n","        q.put(data)\n","    return (in_data, pyaudio.paContinue)\n","\n","print(\"pyAudio\")\n","x = input()\n","\n","stream = pyaudio.PyAudio().open(\n","    format=pyaudio.paInt16,\n","    channels=1,\n","    rate=fs,\n","    input=True,\n","    frames_per_buffer=chunk_samples,\n","    input_device_index=0,\n","    stream_callback=callback)\n","stream.start_stream()\n","\n","print(\"try\")\n","x = input()\n","\n","try:\n","    while run:\n","        data = q.get()\n","\n","except (KeyboardInterrupt, SystemExit):\n","    stream.stop_stream()\n","    stream.close()\n","    timeout = time.time()\n","    run = False\n","        \n","\n","print(\"stream\")\n","x = input()\n","\n","stream.stop_stream()\n","stream.close()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"YH5CFomB-9Ly"},"outputs":[],"source":["stream.stop_stream()\n","stream.close()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"f8yy2tuE-9Ly"},"outputs":[],"source":["plt.plot(np.arange(1*fs)/fs, data)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"s1N5FyUJ-9Lz"},"outputs":[],"source":["n=1\n","print(data.shape)\n","ipd.Audio(data, rate=fs)# [n:n+int(fs)]\n","right_wav = data.copy()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"PdNnDABt-9L0"},"outputs":[],"source":["\n","right_spec = get_spectrogram(right_wav)\n","print(right_spec.shape)\n","plt.imshow(right_spec.numpy().T)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"bM1W1Wk4-9L0"},"outputs":[],"source":["\n","print(model.input.shape)\n","print(right_spec.shape)\n","xx = np.expand_dims(right_spec, [0,-1])\n","yy = model.predict(xx)\n","pred_str = label_list[np.argmax(yy)]\n","print(f\"Classified as \\'{pred_str}\\'\")\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"VmeOp9Iy-9L0"},"outputs":[],"source":["# right_spec_bak = right_spec.numpy().copy()"]},{"cell_type":"markdown","metadata":{"id":"Mm0wyWz_-9L1"},"source":["## Test it streaming"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"2oHfM9p--9L1"},"outputs":[],"source":["# Queue to communiate between the audio callback and main thread\n","q = Queue()\n","\n","run = True\n","\n","silence_threshold = 250\n","\n","# Run the demo for a timeout seconds\n","timeout = time.time() + 10\n","\n","# Data buffer for the input wavform\n","data = np.zeros(feed_samples, dtype='int16')\n","\n","def callback(in_data, frame_count, time_info, status):\n","    global run, timeout, data, silence_threshold \n","\n","    if time.time() > timeout:\n","        run = False        \n","    data0 = np.frombuffer(in_data, dtype='int16')\n","    if np.abs(data0).mean() < silence_threshold:\n","        sys.stdout.write('_')\n","        # return (in_data, pyaudio.paContinue)\n","    else:\n","        sys.stdout.write('*')\n","    data = np.append(data,data0)    \n","    if len(data) > feed_samples:\n","        data = data[-feed_samples:]\n","        # Process data async by sending a queue.\n","        q.put(data)\n","    return (in_data, pyaudio.paContinue)\n","\n","\n","stream = pyaudio.PyAudio().open(\n","    format=pyaudio.paInt16,\n","    channels=1,\n","    rate=fs,\n","    input=True,\n","    frames_per_buffer=chunk_samples,\n","    input_device_index=0,\n","    stream_callback=callback)\n","stream.start_stream()\n","\n","try:\n","    while run:\n","        new_samples = q.get()\n","        mean_abs = np.abs(new_samples).mean()\n","        # print(f\"Mean abs val = {mean_abs}\")\n","        if mean_abs >= silence_threshold:\n","            spectrum = get_spectrogram(new_samples)\n","            spectrum = np.expand_dims(spectrum, [0,-1])\n","            yy = model.predict(spectrum)\n","            pred_str = label_list[np.argmax(yy)]\n","            print(f\"Detected {pred_str}\")\n","        \n","except (KeyboardInterrupt, SystemExit):\n","    stream.stop_stream()\n","    stream.close()\n","    timeout = time.time()\n","    run = False\n","        \n","stream.stop_stream()\n","stream.close()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"5FFJK8Bu-9L2"},"outputs":[],"source":[""]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8.11"},"colab":{"name":"streaming_audio_recog.ipynb","provenance":[],"collapsed_sections":[]}},"nbformat":4,"nbformat_minor":0}